Computer architecture has typically defined computing platforms in terms of hardware and software. Software for computing devices came to be categorized into groups, based on function, which include: a hardware abstraction layer (hereafter “HAL”), an operating system (alternatively referred to, hereafter, as “OS”), and applications.
HAL interfaces with the computer hardware, providing services to the operating system. Thus, the operating system manages and controls functions of the computer via HAL. The operating system utilizes one or more functions known as an application program interface (also referred to as an “API”) to makes computer resources available to an application programmer while, at, the same time, hiding the complexity necessary to actually control the hardware.
An application performs one or more specific tasks for a computer user, e.g., solving a mathematical equation or supporting word processing. Further an application typically executes in an isolated space with specific services in an operating system, typically referred to as a runtime execution environment.
Runtime execution environments have been developed to enhance the reliability of software execution on a growing range of processing devices including servers, desktop computers, laptop computers, and a host of mobile processing devices. In essence, runtime execution environments provide a layer of abstraction and services to an application running on a processing device, and further provide such an application with capabilities including error handling and automatic memory management.
Runtime execution environments serve as at least one of an application programming and application execution platform.
As an application programming platform, a runtime execution environment compiles targeted applications, which may be written in one of multiple computing languages, into an intermediate language (hereafter “IL”). IL is typically independent of the platform and the central processing unit (hereafter “CPU”) executes IL. In fact, IL is a higher level language than many CPU machine languages.
As an application execution platform, a runtime execution environment interprets the compiled IL into native machine instructions. A runtime execution environment may utilize either an interpreter or a “just-in-time” (hereafter “JIT”) compiler to execute such instructions. Regardless, the native machine instructions may then be directly executed by the CPU. As stated before, IL is CPU-independent and therefore IL can execute on any CPU platform as long as the operating system running on that CPU platform hosts an appropriate runtime execution environment. Examples of runtime environments include: Visual Basic runtime environment; Java® Virtual Machine runtime environment that is used to run, e.g., Java® routines; or Common Language Runtime (CLR) to compile, e.g., Microsoft .NET™ applications into machine language before executing a calling routine.
An application compiled into IL is referred to as “managed code.” By contrast, code that does not need the runtime execution environment to execute may be referred to as native code applications.
A runtime execution environment may also include a base library that comprises a large set of class libraries and services. These class libraries and services provide access to the features of the runtime execution environment, as well as other high-level services, saving application programmers targeting a particular runtime execution environment from redundant programming efforts.